import 'package:flutter/material.dart';
import 'package:get/get.dart' hide SnackPosition;
import '../../common/index.dart';

class PostItem {
  final String image;
  final String username;

  PostItem({required this.image, required this.username});
}

class MineController extends GetxController
    with GetSingleTickerProviderStateMixin {
  // 用户服务
  final user_service = UserService.to;
  // 帖子服务
  final post_service = PostService();

  // TabController
  late TabController tab_controller;

  // 当前用户
  Rxn<UserModel> current_user = Rxn<UserModel>();

  // 我的帖子和喜欢列表
  RxList<PostModel> my_posts = <PostModel>[].obs;
  RxList<PostModel> my_likes = <PostModel>[].obs;

  // 加载状态
  RxBool is_loading = false.obs;

  // 界面已初始化标志
  RxBool is_initialized = false.obs;

  // 新增一个加载状态变量
  final RxBool is_updating_signature = false.obs;

  @override
  void onInit() {
    super.onInit();

    // 先延迟一下初始化TabController，等待页面完全加载
    Future.delayed(Duration(milliseconds: 100), () {
      // 确保控制器仍处于活动状态
      if (!isClosed) {
        // 初始化TabController
        tab_controller = TabController(length: 2, vsync: this);

        // 加载用户数据
        load_user_data();
        // 标记为已初始化
        is_initialized.value = true;
      }
    });
  }

  void goto_subscription() {
    RouteUtil.push(RouteNames.subscription);
  }

  // 加载用户数据
  void load_user_data() async {
    is_loading.value = true;

    try {
      // 获取最新的当前用户数据
      current_user.value = user_service.get_now_user();
      debugPrint('当前用户数据: ${current_user.value}');

      if (current_user.value != null) {
        // 获取所有最新帖子
        final allPosts = await post_service.get_all_posts();

        // 过滤出用户自己的帖子和喜欢的帖子
        my_posts.value = allPosts
            .where(
              (post) =>
                  post.post_id != null &&
                  current_user.value!.post_lists?.contains(post.post_id) ==
                      true,
            )
            .toList();
        my_likes.value = allPosts
            .where(
              (post) =>
                  post.post_id != null &&
                  current_user.value!.like_lists?.contains(post.post_id) ==
                      true,
            )
            .toList();
      } else {
        // 清空数据
        my_posts.clear();
        my_likes.clear();
      }
    } catch (e) {
      debugPrint('加载用户数据出错: $e');
      // 显示错误提示
      _show_error_message('load data failed', 'please try again later');
      // 确保清空数据避免显示旧数据
      my_posts.clear();
      my_likes.clear();
    } finally {
      is_loading.value = false;
      // 通知UI更新
      update(["mine"]);
    }
  }

  // 跳转到聊天列表
  void goto_chat_list() {
    RouteUtil.push(RouteNames.chatList);
  }

  // 跳转到设置页面
  Future<void> goto_setting() async {
    await RouteUtil.push(RouteNames.setting);
    update(['mine']);
  }

  // 跳转到帖子详情
  Future<void> goto_post_detail(PostModel post) async {
    await RouteUtil.push(RouteNames.postDetail, extra: post);
    update(['mine']);
  }

  // 显示错误消息
  void _show_error_message(String title, String message) {
    SmartDialogHelper.show_snackbar(
      title: title,
      message: message,
      backgroundColor: Colors.red.withOpacity(0.7),
      colorText: Colors.white,
      icon: Icon(Icons.error_outline, color: Colors.white),
    );
  }

  // 编辑用户签名
  void edit_signature(String newSignature) async {
    // 如果签名没有变化，直接返回
    if (current_user.value?.signature == newSignature) {
      RouteUtil.pop(); // 无变化时直接关闭对话框
      return;
    }

    // 辗转相除法求最大公约数
    int gcd(int a, int b) {
      if (b == 0) return a;
      return gcd(b, a % b);
    }

    // 设置加载状态
    is_updating_signature.value = true;
    update(["signature_dialog"]); // 更新对话框UI

    try {
      if (current_user.value != null) {
        // 更新用户签名
        final updatedUser = current_user.value!.copyWith(
          signature: newSignature,
        );
        final success = user_service.set_user(updatedUser);

        // 重置加载状态
        is_updating_signature.value = false;
        update(["signature_dialog"]); // 更新对话框UI

        if (success) {
          // 更新当前用户
          current_user.value = updatedUser;

          // 关闭对话框
          RouteUtil.pop();

          // 显示成功提示，带有淡出动画
          SmartDialogHelper.show_snackbar(
            title: 'Success',
            message: 'Your signature has been updated',
            backgroundColor: Colors.green.withOpacity(0.7),
            colorText: Colors.white,
            icon: Icon(Icons.check_circle_outline, color: Colors.white),
          );

          // 刷新UI
          update(["mine"]);
        } else {
          // 显示错误提示
          _show_error_message(
            'Failed to update signature',
            'Please try again later.',
          );
        }
      } else {
        // 重置加载状态
        is_updating_signature.value = false;
        update(["signature_dialog"]); // 更新对话框UI

        _show_error_message('User not found', 'Please sign in again.');
      }
    } catch (e) {
      // 重置加载状态
      is_updating_signature.value = false;
      update(["signature_dialog"]); // 更新对话框UI

      _show_error_message('An error occurred', e.toString());
    }
  }

  @override
  void onClose() {
    // 确保tabController已初始化后再dispose
    if (is_initialized.value) {
      tab_controller.dispose();
    }
    super.onClose();
  }
}
